home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / LabelView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  10.0 KB  |  475 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Rectangle;
  10. import java.awt.Shape;
  11. import java.awt.Toolkit;
  12. import javax.swing.event.DocumentEvent;
  13. import javax.swing.text.Position.Bias;
  14.  
  15. public class LabelView extends View implements TabableView {
  16.    Font font;
  17.    FontMetrics metrics;
  18.    // $FF: renamed from: fg java.awt.Color
  19.    Color field_0;
  20.    // $FF: renamed from: bg java.awt.Color
  21.    Color field_1;
  22.    Segment text = new Segment();
  23.    boolean underline;
  24.    boolean strike;
  25.    boolean superscript;
  26.    boolean subscript;
  27.    boolean rightToLeft;
  28.    TabExpander expander;
  29.    // $FF: renamed from: x int
  30.    int field_2;
  31.  
  32.    public LabelView(Element var1) {
  33.       super(var1);
  34.       int var2 = var1.getStartOffset();
  35.       int var3 = var1.getEndOffset();
  36.       Document var4 = ((View)this).getDocument();
  37.       if (var4 instanceof AbstractDocument) {
  38.          this.rightToLeft = ((AbstractDocument)var4).isLeftToRight(var2, var3) ^ true;
  39.       }
  40.  
  41.    }
  42.  
  43.    public View breakView(int var1, int var2, float var3, float var4) {
  44.       if (var1 == 0) {
  45.          this.sync();
  46.          this.loadText(var2, ((View)this).getEndOffset());
  47.          int var5 = Utilities.getBreakLocation(this.text, this.metrics, (int)var3, (int)(var3 + var4), this.expander, var2);
  48.          int var6 = var2 + var5;
  49.          LabelFragment var7 = new LabelFragment(this, ((View)this).getElement(), var2, var6);
  50.          var7.x = (int)var3;
  51.          return var7;
  52.       } else {
  53.          return this;
  54.       }
  55.    }
  56.  
  57.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  58.       this.font = null;
  59.    }
  60.  
  61.    public View createFragment(int var1, int var2) {
  62.       Element var3 = ((View)this).getElement();
  63.       return new LabelFragment(this, var3, var1, var2);
  64.    }
  65.  
  66.    public float getAlignment(int var1) {
  67.       if (var1 == 1) {
  68.          float var2 = (float)this.metrics.getHeight();
  69.          float var3 = (float)this.metrics.getDescent();
  70.          float var4 = (var2 - var3) / var2;
  71.          return var4;
  72.       } else {
  73.          return super.getAlignment(var1);
  74.       }
  75.    }
  76.  
  77.    public int getBreakWeight(int var1, float var2, float var3) {
  78.       return this.getBreakWeight(var1, var2, var3, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  79.    }
  80.  
  81.    int getBreakWeight(int var1, float var2, float var3, int var4, int var5) {
  82.       if (var1 != 0) {
  83.          return super.getBreakWeight(var1, var2, var3);
  84.       } else {
  85.          this.sync();
  86.          this.loadText(var4, var5);
  87.          int var6 = Utilities.getTabbedTextOffset(this.text, this.metrics, (int)var2, (int)(var2 + var3), this.expander, var4);
  88.          if (var6 == 0) {
  89.             return 0;
  90.          } else {
  91.             for(int var7 = this.text.offset + Math.min(var6, this.text.count - 1); var7 >= this.text.offset; --var7) {
  92.                char var8 = this.text.array[var7];
  93.                if (Character.isWhitespace(var8)) {
  94.                   return 2000;
  95.                }
  96.             }
  97.  
  98.             return 1000;
  99.          }
  100.       }
  101.    }
  102.  
  103.    protected Font getFont() {
  104.       this.sync();
  105.       return this.font;
  106.    }
  107.  
  108.    protected FontMetrics getFontMetrics() {
  109.       this.sync();
  110.       return this.metrics;
  111.    }
  112.  
  113.    public int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException {
  114.       int var6 = this.getNextVisualPositionFrom(var1, var2, var3, var4, var5, this.rightToLeft, ((View)this).getStartOffset(), ((View)this).getEndOffset());
  115.       return var6;
  116.    }
  117.  
  118.    int getNextVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, boolean var6, int var7, int var8) throws BadLocationException {
  119.       switch (var4) {
  120.          case 1:
  121.          case 5:
  122.             return var1;
  123.          case 2:
  124.          case 4:
  125.          case 6:
  126.          default:
  127.             throw new IllegalArgumentException("Bad direction: " + var4);
  128.          case 3:
  129.             if (var7 == ((View)this).getDocument().getLength()) {
  130.                if (var1 == -1) {
  131.                   var5[0] = Bias.Forward;
  132.                   return var7;
  133.                }
  134.  
  135.                return -1;
  136.             } else if (var6) {
  137.                if (var1 == -1) {
  138.                   this.loadText(var8 - 1, var8);
  139.                   if (this.text.array[this.text.offset] == '\n') {
  140.                      var5[0] = Bias.Forward;
  141.                      return var8 - 1;
  142.                   }
  143.  
  144.                   var5[0] = Bias.Backward;
  145.                   return var8;
  146.                } else {
  147.                   if (var1 == var7) {
  148.                      return -1;
  149.                   }
  150.  
  151.                   var5[0] = Bias.Forward;
  152.                   return var1 - 1;
  153.                }
  154.             } else if (var1 == -1) {
  155.                var5[0] = Bias.Forward;
  156.                return var7;
  157.             } else if (var1 == var8) {
  158.                return -1;
  159.             } else {
  160.                ++var1;
  161.                if (var1 == var8) {
  162.                   this.loadText(var8 - 1, var8);
  163.                   if (this.text.array[this.text.offset] == '\n') {
  164.                      return -1;
  165.                   }
  166.  
  167.                   var5[0] = Bias.Backward;
  168.                } else {
  169.                   var5[0] = Bias.Forward;
  170.                }
  171.  
  172.                return var1;
  173.             }
  174.          case 7:
  175.             if (var7 == ((View)this).getDocument().getLength()) {
  176.                if (var1 == -1) {
  177.                   var5[0] = Bias.Forward;
  178.                   return var7;
  179.                } else {
  180.                   return -1;
  181.                }
  182.             } else if (var6) {
  183.                if (var1 == -1) {
  184.                   var5[0] = Bias.Forward;
  185.                   return var7;
  186.                } else if (var1 == var8) {
  187.                   return -1;
  188.                } else {
  189.                   ++var1;
  190.                   if (var1 == var8) {
  191.                      this.loadText(var8 - 1, var8);
  192.                      if (this.text.array[this.text.offset] == '\n') {
  193.                         return -1;
  194.                      }
  195.  
  196.                      var5[0] = Bias.Backward;
  197.                   } else {
  198.                      var5[0] = Bias.Forward;
  199.                   }
  200.  
  201.                   return var1;
  202.                }
  203.             } else if (var1 == -1) {
  204.                this.loadText(var8 - 1, var8);
  205.                if (this.text.array[this.text.offset] == '\n') {
  206.                   var5[0] = Bias.Forward;
  207.                   return var8 - 1;
  208.                } else {
  209.                   var5[0] = Bias.Backward;
  210.                   return var8;
  211.                }
  212.             } else if (var1 == var7) {
  213.                return -1;
  214.             } else {
  215.                var5[0] = Bias.Forward;
  216.                return var1 - 1;
  217.             }
  218.       }
  219.    }
  220.  
  221.    public float getPartialSpan(int var1, int var2) {
  222.       this.sync();
  223.       int var3 = 0;
  224.  
  225.       try {
  226.          Segment var4 = new Segment();
  227.          ((View)this).getDocument().getText(var1, var2 - var1, var4);
  228.          var3 = Utilities.getTabbedTextWidth(var4, this.metrics, this.field_2, this.expander, var1);
  229.       } catch (BadLocationException var5) {
  230.       }
  231.  
  232.       return (float)var3;
  233.    }
  234.  
  235.    public float getPreferredSpan(int var1) {
  236.       return this.getPreferredSpan(var1, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_2);
  237.    }
  238.  
  239.    final float getPreferredSpan(int var1, int var2, int var3, int var4) {
  240.       this.sync();
  241.       switch (var1) {
  242.          case 0:
  243.             this.loadText(var2, var3);
  244.             int var5 = Utilities.getTabbedTextWidth(this.text, this.metrics, var4, this.expander, var2);
  245.             return (float)Math.max(var5, 1);
  246.          case 1:
  247.             return (float)this.metrics.getHeight();
  248.          default:
  249.             throw new IllegalArgumentException("Invalid axis: " + var1);
  250.       }
  251.    }
  252.  
  253.    public float getTabbedSpan(float var1, TabExpander var2) {
  254.       this.expander = var2;
  255.       this.field_2 = (int)var1;
  256.       return this.getPreferredSpan(0, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.field_2);
  257.    }
  258.  
  259.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  260.       super.insertUpdate(var1, var2, var3);
  261.       int var4 = ((View)this).getStartOffset();
  262.       int var5 = ((View)this).getEndOffset();
  263.       Document var6 = ((View)this).getDocument();
  264.       if (var6 instanceof AbstractDocument) {
  265.          this.rightToLeft = ((AbstractDocument)var6).isLeftToRight(var4, var5) ^ true;
  266.       }
  267.  
  268.    }
  269.  
  270.    final void loadText(int var1, int var2) {
  271.       try {
  272.          Document var3 = ((View)this).getDocument();
  273.          var3.getText(var1, var2 - var1, this.text);
  274.       } catch (BadLocationException var4) {
  275.          throw new StateInvariantError("LabelView: Stale view: " + var4);
  276.       }
  277.    }
  278.  
  279.    Shape modelToView(int var1, Shape var2, int var3, int var4, Position.Bias var5, boolean var6) throws BadLocationException {
  280.       Rectangle var7 = var2.getBounds();
  281.       if (var1 == var4) {
  282.          this.loadText(var3, var3 + 1);
  283.          this.sync();
  284.          return !var6 ? new Rectangle(var7.x + var7.width, var7.y, 0, this.metrics.getHeight()) : new Rectangle(var7.x, var7.y, 0, this.metrics.getHeight());
  285.       } else if (var1 >= var3 && var1 <= var4) {
  286.          this.loadText(var3, var1);
  287.          this.sync();
  288.          int var8 = Utilities.getTabbedTextWidth(this.text, this.metrics, var7.x, this.expander, var3);
  289.          return var6 ? new Rectangle(var7.x + var7.width - var8, var7.y, 0, this.metrics.getHeight()) : new Rectangle(var7.x + var8, var7.y, 0, this.metrics.getHeight());
  290.       } else {
  291.          throw new BadLocationException("modelToView - can't convert", var4);
  292.       }
  293.    }
  294.  
  295.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  296.       return this.modelToView(var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset(), var3, this.rightToLeft);
  297.    }
  298.  
  299.    public void paint(Graphics var1, Shape var2) {
  300.       Container var3 = ((View)this).getContainer();
  301.       if (this.field_1 != null) {
  302.          Rectangle var4 = var2 instanceof Rectangle ? (Rectangle)var2 : var2.getBounds();
  303.          var1.setColor(this.field_1);
  304.          var1.fillRect(var4.x, var4.y, var4.width, var4.height);
  305.       }
  306.  
  307.       if (var3 instanceof JTextComponent) {
  308.          JTextComponent var6 = (JTextComponent)var3;
  309.          Highlighter var5 = var6.getHighlighter();
  310.          if (var5 instanceof LayeredHighlighter) {
  311.             ((LayeredHighlighter)var5).paintLayeredHighlights(var1, ((View)this).getStartOffset(), ((View)this).getEndOffset(), var2, var6, this);
  312.          }
  313.       }
  314.  
  315.       this.paintText(var3, var1, var2, ((View)this).getStartOffset(), ((View)this).getEndOffset(), false, this.rightToLeft);
  316.    }
  317.  
  318.    void paintText(Component var1, Graphics var2, Shape var3, int var4, int var5, boolean var6, boolean var7) {
  319.       Rectangle var8 = var3.getBounds();
  320.       this.sync();
  321.       int var9 = var8.y + var8.height - this.metrics.getDescent();
  322.       var2.setFont(this.font);
  323.       boolean var10 = false;
  324.       if (var1 instanceof JTextComponent) {
  325.          JTextComponent var11 = (JTextComponent)var1;
  326.          Color var12 = var11.getSelectedTextColor();
  327.          if (var12 != null && !var12.equals(this.field_0)) {
  328.             Position.Bias[] var13 = new Position.Bias[1];
  329.             Position.Bias[] var14 = new Position.Bias[1];
  330.             int var15 = var11.getSelectionStart(var13);
  331.             int var16 = var11.getSelectionEnd(var14);
  332.             if (var15 != var16) {
  333.                int var17;
  334.                if (var15 <= var4) {
  335.                   var17 = var4;
  336.                } else {
  337.                   var17 = Math.min(var15, var5);
  338.                }
  339.  
  340.                int var18;
  341.                if (var16 >= var5) {
  342.                   var18 = var5;
  343.                } else {
  344.                   var18 = Math.max(var16, var4);
  345.                }
  346.  
  347.                if (var17 != var18) {
  348.                   int var19 = var8.x;
  349.                   var10 = true;
  350.                   if (var17 > var4) {
  351.                      var19 = this.paintTextUsingColor(var19, var9, var2, var4, var17, this.field_0, var6);
  352.                   }
  353.  
  354.                   var19 = this.paintTextUsingColor(var19, var9, var2, var17, var18, var12, var6);
  355.                   if (var18 < var5) {
  356.                      this.paintTextUsingColor(var19, var9, var2, var18, var5, this.field_0, var6);
  357.                   }
  358.                }
  359.             }
  360.          }
  361.       }
  362.  
  363.       if (!var10) {
  364.          this.paintTextUsingColor(var8.x, var9, var2, var4, var5, this.field_0, var6);
  365.       }
  366.  
  367.    }
  368.  
  369.    final int paintTextUsingColor(int var1, int var2, Graphics var3, int var4, int var5, Color var6, boolean var7) {
  370.       var3.setColor(var6);
  371.       this.loadText(var4, var5);
  372.       if (this.superscript) {
  373.          var2 -= this.metrics.getAscent() / 2;
  374.       } else if (this.subscript) {
  375.          var2 += this.metrics.getDescent();
  376.       }
  377.  
  378.       var1 = Utilities.drawTabbedText(this.text, var1, var2, var3, this.expander, var4);
  379.       if (this.underline || this.strike) {
  380.          int var9 = var1 - var1;
  381.          if (var7) {
  382.             while(this.text.count > 0 && Character.isWhitespace(this.text.array[this.text.count - 1])) {
  383.                var9 -= this.metrics.charWidth(this.text.array[this.text.count - 1]);
  384.                --this.text.count;
  385.             }
  386.          }
  387.  
  388.          if (this.underline) {
  389.             ++var2;
  390.          } else if (this.strike) {
  391.             var2 -= this.metrics.getAscent() / 2;
  392.          }
  393.  
  394.          var3.drawLine(var1, var2, var1, var2);
  395.       }
  396.  
  397.       return var1;
  398.    }
  399.  
  400.    protected void setPropertiesFromAttributes() {
  401.       AttributeSet var1 = ((View)this).getAttributes();
  402.       if (var1 != null) {
  403.          Document var2 = ((View)this).getDocument();
  404.          if (!(var2 instanceof StyledDocument)) {
  405.             throw new StateInvariantError("LabelView needs StyledDocument");
  406.          }
  407.  
  408.          StyledDocument var3 = (StyledDocument)var2;
  409.          this.font = var3.getFont(var1);
  410.          this.field_0 = var3.getForeground(var1);
  411.          if (var1.isDefined(StyleConstants.Background)) {
  412.             this.field_1 = var3.getBackground(var1);
  413.          } else {
  414.             this.field_1 = null;
  415.          }
  416.  
  417.          this.setUnderline(StyleConstants.isUnderline(var1));
  418.          this.setStrikeThrough(StyleConstants.isStrikeThrough(var1));
  419.          this.setSuperscript(StyleConstants.isSuperscript(var1));
  420.          this.setSubscript(StyleConstants.isSubscript(var1));
  421.          this.metrics = Toolkit.getDefaultToolkit().getFontMetrics(this.font);
  422.       }
  423.  
  424.    }
  425.  
  426.    protected void setStrikeThrough(boolean var1) {
  427.       this.strike = var1;
  428.    }
  429.  
  430.    protected void setSubscript(boolean var1) {
  431.       this.subscript = var1;
  432.    }
  433.  
  434.    protected void setSuperscript(boolean var1) {
  435.       this.superscript = var1;
  436.    }
  437.  
  438.    protected void setUnderline(boolean var1) {
  439.       this.underline = var1;
  440.    }
  441.  
  442.    final void sync() {
  443.       if (this.font == null) {
  444.          this.setPropertiesFromAttributes();
  445.       }
  446.  
  447.    }
  448.  
  449.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  450.       var4[0] = Bias.Forward;
  451.       return this.viewToModel(var1, var2, var3, var4, ((View)this).getStartOffset(), ((View)this).getEndOffset(), this.rightToLeft);
  452.    }
  453.  
  454.    int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4, int var5, int var6, boolean var7) {
  455.       Rectangle var8 = var3.getBounds();
  456.       this.sync();
  457.       this.loadText(var5, var6);
  458.       int var9 = Utilities.getTabbedTextOffset(this.text, this.metrics, var8.x, (int)var1, this.expander, var5);
  459.       int var10;
  460.       if (var7) {
  461.          var10 = var6 - var9;
  462.       } else {
  463.          var10 = var5 + var9;
  464.       }
  465.  
  466.       if (var10 == var6) {
  467.          var4[0] = Bias.Backward;
  468.       } else {
  469.          var4[0] = Bias.Forward;
  470.       }
  471.  
  472.       return var10;
  473.    }
  474. }
  475.